// #include <iostream>
// #include <vector>
// #include <limits.h>
// #include <algorithm>
// #include <math.h>
// using namespace std;

//调石板
// void get_div_num(int v,vector<int>& a)
// {
//     for(int i =2; i<=sqrt(v); i++)
//     {
//         if(v % i == 0)
//         {
//             a.push_back(i);
//             if(v / i != i)
//                 a.push_back(v/i);
//         }
//     }
// }


// int Jump(int n,int m)
// {
//     vector<int> step(m+1,INT_MAX);
//     step[n] = 0;
//     for(int i =n; i<m; i++)
//     {
//         if(step[i] == INT_MAX)
//             continue;

//         vector<int> a;
//         get_div_num(i,a);

//         for(int j =0; j<a.size(); j++)
//         {
//             if(a[j] + i <= m && step[a[j] +i] != INT_MAX)
//             {
//                 //比较大小，挑选一个小的数
//                 step[a[j] + i] = min(step[a[j] + i],step[i] + 1);
//             }else if(a[j] + i <= m)
//             {
//                 step[a[j] + i] = step[i] +1;
//             }
//         }
//     }
    
//     return step[m] == INT_MAX ? -1:step[m];
// }

// int main() {
//     int n,m,min_step;
//     while(cin >> n >> m)
//     {
//         min_step = Jump(n,m);
//         cout << min_step << endl;
//     }
// }

//------------------------------------------------
//参数解析
#include <iostream>
#include <string>
#include <vector>
using namespace std;

void cmdLineParse(const string& str)
{
    string tmp = "";
    vector<string> svec;
    bool flag = false;
    for(int i =0; i<str.size(); i++)
    {
        if(str[i] == '"')
        {
            flag = !flag;
        }else if(str[i] == ' ' && !flag)
        {
            svec.push_back(tmp);
            tmp = "";
        }else
        {
            tmp += str[i];
        }
    }
        svec.push_back(tmp);

        cout << svec.size() << endl;
        for(int i =0; i<svec.size(); i++)
        {
            cout << svec[i] <<endl;
        }
}

int main() {
    string str;
    while(getline(cin,str))
    {
        cmdLineParse(str);
    }
}